package com.String.EncodeUtil;

/*
执行输出为：
UTF-8
UTF-8
注意：如果将数组”String encode[]“中”UTF-8“和”GB2312“的位置换一下，结果就会发生改变为：
GB2312
UTF-8
这是为什么？
通过监视以下代码中的”destination.getBytes“，我们可以发现是存在重码区域的！
 * 所以”getEncoding“方法的正确性有是局限性的，一方面是数组中包含的编码的各类是否够全，一方面是需要判断的字符串特征是否明显。
 */
public class GetEncoding {

	public static String getEncoding(String str) {
		
		String encode = "UTF-8";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s2 = encode;
				return s2;
			}
		} catch (Exception exception2) {
		}
		
		encode = "ISO-8859-1";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s1 = encode;
				return s1;
			}
		} catch (Exception exception1) {
		}
		
		encode = "GB2312";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s = encode;
				return s;
			}
		} catch (Exception exception) {
		}


		encode = "GBK";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s3 = encode;
				return s3;
			}
		} catch (Exception exception3) {
		}
		return "";
	}
	
	/**
	 * 判断字符串的编码
	 *
	 * @param str
	 * @return
	 */
	public static String getEncoding2(String str) {
		String encode[] = new String[]{
				"UTF-8",
				"ISO-8859-1",
				"GB2312",
				"GBK",
				"GB18030",
				"Big5",
				"Unicode",
				"ASCII"
		};
		for (int i = 0; i < encode.length; i++){
			try {
				if (str.equals(new String(str.getBytes(encode[i]), encode[i]))) {
					return encode[i];
				}
			} catch (Exception ex) {
			}
		}
		
		return "";
	}
}
